package map;

import java.util.HashMap;
import java.util.Map;

/**
 * java.util.Map  查找表
 * Map体现的结构是一个多行两列的表格.其中左列称为key,右列称为value
 * Map总是根据key获取对应的value
 * Map中的key不允许重复(equals判定)
 *
 * Map是一个接口，常用的实现类:
 *  * java.util.HashMap:散列表，哈希表。
 *  * 散列表是当今查询速度最快的数据结构，被大量应用于缓存服务器中。
 *  几乎不受空间复杂度影响
 */
public class MapDemo1 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        //散列算法导致顺序不一致
        /*
        V put(K k,V v)
        向Map中存入一组键值对
        由于Map要求key不允许重复,如果使用重复的key则为替换value操作,此时方法返回值为被替换的value,否则返回值为null
        如果Map的value是包装类,获取value时要用包装类,避免因为自动拆装箱导致的空指针异常
         */
        map.put("语文",98);
        map.put("数学",98);
        map.put("英语",88);
        map.put("化学",9);
        Integer value;
        value = map.put("化学",22);
        System.out.println(value);
        /*
        V get(Object key)
        根据给定的key获取对应的value.如果给定的key在Map中不存在,则返回null
         */
        value = map.get("语文");
        System.out.println(value);
        /*
        V remove(Object key)
        根据key删除对应的键值对.返回值为这个key对应的value.如果给定的key在Map中不存在,则返回null
         */
        value = map.remove("化学");
        System.out.println(map);
        System.out.println(value);
        System.out.println(map.size());//获取Map中的键值对个数
        /*
        boolean containsKey(Object key)  判断当前Map是否包含指定key
        boolean containsValue(Object value)  判断当前Map是否包含指定value
         */
        System.out.println(map.containsKey("化学"));//是否包含key
        System.out.println(map.containsValue(88));//是否包含value
//        map.clear();//清空Map
        System.out.println(map);
        map.forEach((k,v)-> System.out.println(k+":"+v));
    }
}
